/*进程1——接收键盘信号、给进程2发信号*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>

int pid2;//全局变量
void sigint_handler(int signum);

int main(int argc,char** argv)
{
	int fd;
	
	/*捕捉ctrl+C信号*/
	signal(SIGINT,sigint_handler);
	
	/*获取进程2的PID（通过管道）*/
	/*检查参数*/
	if(argc != 2)
	{
		printf("如要读取管道，则输入：%s 管道名\n",argv[0]);
		return 1;
	}

	/*创建管道*/
	if(mkfifo(argv[1], 0664) < 0)
	{
		perror("mkfifo");
		return 1;
	}
	printf("已创建管道\n");

	/*打开管道*/
	fd = open(argv[1],O_RDWR);
	if(fd == -1)
	{
		perror("open");
		return 1;
	}

	printf("-------------------------------------------------------------\n");
	read(fd,&pid2,sizeof(int));//读取进程2PID，保存到pid2变量中【卡住】
	printf("pid2 = %d\n",pid2);
	close(fd);//关闭管道

	/*主程序死循环*/
	while(1)
	{
		printf("等待ctrl+C信号……\n");
		sleep(1);
	}

	return 0;
}

void sigint_handler(int signum)
{
	if(signum == SIGINT)
	{
		printf("进程1接收到ctrl+C信号\n");
		kill(pid2,SIGUSR1);//给进程2发信号
	}
	else
		printf("接收到的不是SIGINT信号\n");
}

